using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;


public class FileUtil
{
    //实用类都是用静态方法

    /// <summary>
    /// 检测文件是否存在
    /// </summary>
    /// <param name="path"></param>
    /// <returns></returns>
    public static bool IsExists(string path)
    {
        //FileInfo类判断文件是否存在是实例方法
        //File类判断文件是否存在是静态方法（和Directory类同理）

        //File类和Directory类是静态工具类，它通常用于执行单一的、直接的文件操作，对文件的状态或属性不做深入的管理
        //FileInfo类是实例工具类，提供了获取文件的详细信息（如文件名、大小、创建时间等）和更复杂的文件操作（如复制、移动和删除）的能力。它使得用户可以在执行操作时，更加灵活地访问文件的元数据。

        //FileInfo需要实例化对象，该对象存储了文件的信息，可以通过对象调用方法来操作文件
        FileInfo fileInfo = new FileInfo(path);
        return fileInfo.Exists;
    }

    /// <summary>
    /// 写入文件
    /// </summary>
    /// <param name="path"></param>
    /// <param name="data"></param>
    public static void WriteFile(string path, byte[] data)
    {
        //获取标准路径（\\换成/，去掉空格），用来获取文件夹
        path = PathUtil.GetStandardPath(path);
        //文件夹路径,使用LastIndexOf会在/之前截取字符串，传入的参数应该是截取的字符串的长度
        string dir = path.Substring(0, path.LastIndexOf('/'));
        //Directory类判断文件夹是否存在的方法是静态的
        if (!Directory.Exists(dir))
        {
            //没有则创建一个文件夹
            Directory.CreateDirectory(dir);
        }
        //覆盖式写入文件
        FileInfo fileInfo = new FileInfo(path);
        if (fileInfo.Exists)
        {
            fileInfo.Delete();
        }
        //try-catch语句用于捕获异常，即使程序出现异常，也不会导致程序崩溃
        try
        {
            //using语句会自动释放资源，用于文件操作（无论代码块是否正常执行，即使发生异常，都会确保 Dispose() 被调用，资源会被正确释放）
            //FileStream基本构造方法参数包括文件路径，文件打开方式，文件访问权限，文件共享权限
            using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                fs.Write(data, 0, data.Length);
                fs.Close();
            }
        }
        catch (IOException e)
        {
            Debug.LogError(e.Message);
        }
    }
}
